/**
 * @file LogManager.cpp
 * @author iam002
 * @brief 日志类
 * @version 0.1
 * 
 * @copyright Copyright (c) 2023
 * 
 */
#include "logmanager.h"
#include <iostream>
INITIALIZE_EASYLOGGINGPP

/* 是否启用日志宏, 关闭后日志宏无效 */
bool _IS_LOG_ON = true;
/* 输出日志路径是否合法 */
bool _IS_LOG_PATH_VALID = false;

/* easylogging日志对象 */
el::Logger* _LOG_MANAGER = el::Loggers::getLogger("default");

void SetLogManager(bool bToStd, bool is_cover, const char* logPath)
{
#ifndef LOGMANAGER_TURN_OFF
	el::Configurations conf;
	conf.setToDefault();
	MSG_LOG_ENABLE;

	/* 是否重定向到标准输出 */
	if (bToStd == false) {
		if (logPath == nullptr) {
			MSG_LOG_DISABLE;
		}
		conf.set(el::Level::Global, el::ConfigurationType::ToStandardOutput, "false");
	}

	/* 是否覆盖之前的日志 */
	if (is_cover) {
		std::ofstream ofile(logPath, std::ios::trunc);
		if (ofile.is_open()) {
			ofile.close();
		}
	}

	/* 设置日志路径 */
	if (logPath != nullptr) {
		conf.set(el::Level::Global, el::ConfigurationType::ToFile, "true");
		conf.set(el::Level::Global, el::ConfigurationType::Filename, logPath);
	}
	else {
		_IS_LOG_PATH_VALID = false;
		MSG_LOG_DISABLE;
	}

	/* 设置日志格式 */
	conf.set(el::Level::Info,	 el::ConfigurationType::Format, "[%level] %msg");
	conf.set(el::Level::Debug,	 el::ConfigurationType::Format, "[%level] %msg");
	conf.set(el::Level::Warning, el::ConfigurationType::Format, "[%level] %msg");
	conf.set(el::Level::Error,	 el::ConfigurationType::Format, "[%level] %msg");
	conf.set(el::Level::Fatal,	 el::ConfigurationType::Format, "[%level] %msg");

	/* 配置到日志类 */
	el::Loggers::reconfigureLogger(_LOG_MANAGER, conf);

#endif
}
